package com.zmn.plat.services.impl.sms;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.zmn.common.dto.StatusDTO;
import com.zmn.common.utils.date.DateUtil;
import com.zmn.plat.model.entity.sms.SmsTemplate;
import com.zmn.plat.model.entity.sms.SmsTemplateQuery;
import com.zmn.plat.persistence.interfaces.sms.SmsTemplateDao;
import com.zmn.plat.services.interfaces.sms.SmsTemplateService;

/**
 * @author nowind
 * @since 17/10/30 11:40
 */
@Service
public class SmsTemplateServiceImpl implements SmsTemplateService {

    @Resource
    private SmsTemplateDao templateDao;

    @Override
    public SmsTemplate findByKey(Integer templateId) {
        return templateDao.findByKey(templateId);
    }

    @Override
    public Integer findKeyForMax() {
        Integer maxId = templateDao.findKeyForMax();
        return (maxId == null || maxId <= 100 ? 100 : maxId) + 1;
    }

    @Override
    public List<SmsTemplate> listPageByQuery(SmsTemplateQuery query) {
        Integer count = this.countByQuery(query);
        query.setTotalCount(count);
        return count == 0 ? new ArrayList<>(0) : templateDao.listPageByQuery(query);
    }

    @Override
    public List<SmsTemplate> listByQuery(SmsTemplateQuery query) {
        return templateDao.listByQuery(query);
    }

    @Override
    public Integer countByQuery(SmsTemplateQuery query) {
        return templateDao.countByQuery(query);
    }

    @Override
    public Integer updateByKey(SmsTemplate template) {
        if (template.getUpdateTime() == null) {
            template.setUpdateTime(DateUtil.getNow());
        }
        return templateDao.updateByKey(template);
    }

    @Override
    public Integer updateStatus(Integer categId, Integer status, String updater) {
        SmsTemplate template = new SmsTemplate();
        template.setTemplateId(categId);
        template.setStatus(status);
        template.setUpdater(updater);
        return this.updateStatus(template);
    }

    @Override
    public Integer updateStatus(SmsTemplate template) {
        if (template.getUpdateTime() == null) {
            template.setUpdateTime(DateUtil.getNow());
        }
        return templateDao.updateStatus(template);
    }

    @Override
    public Integer updateStatusBatch(List<Integer> templateIds, Integer status, String updater) {
        StatusDTO dto = new StatusDTO();
        dto.setIds(templateIds);
        dto.setStatus(status);
        dto.setUpdater(updater);
        return this.updateStatusBatch(dto);
    }

    @Override
    public Integer updateStatusBatch(StatusDTO dto) {
        if (dto.getUpdateTime() == null) {
            dto.setUpdateTime(DateUtil.getNow());
        }
        return templateDao.updateStatusBatch(dto);
    }

    @Override
    public Integer updateSort(Integer templateId, Integer sort) {
        SmsTemplate template = new SmsTemplate();
        template.setTemplateId(templateId);
        template.setSort(sort);
        return this.updateSort(template);
    }

    @Override
    public Integer updateSort(SmsTemplate template) {
        return templateDao.updateSort(template);
    }

    @Override
    public Integer insert(SmsTemplate template) {
        if (template.getUpdateTime() == null) {
            template.setUpdateTime(DateUtil.getNow());
        }
        return templateDao.insert(template);
    }

    @Override
    public Integer deleteByKey(Integer categId) {
        return templateDao.deleteByKey(categId);
    }
}
